﻿using System;
using System.Data;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

namespace LI4.Data
{
    public class WebServices
    {
        private Ligacao ligacao;

        public WebServices()
        {
            ligacao = new Ligacao();
        }

        public List<Business.Curso> getCursosNome(string nomec)
        {
            List<Business.Curso> array = new List<Business.Curso>();
            SqlDataReader reader;


            ligacao.Select("select * from cursos where nome like '%" + nomec + "%'");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {

                int cod_curso = reader.GetInt32(0);
                string nome = reader.GetString(1);
                int cod_area = reader.GetInt32(2);
                Data.Area areap = new Data.Area();
                Business.Area area = new Business.Area(areap.getArea(cod_area));
                string morada = reader.GetString(3);
                string cod_pos = reader.GetString(4);
                string descricao = reader.GetString(5);
                int nr_inscritos = reader.GetInt32(6);
                int total_vagas = reader.GetInt32(7);
                int renumeracao = reader.GetInt32(8);
                int cod_loc = reader.GetInt32(9);
                Data.Localidade locald = new Data.Localidade();
                Business.Localidade localidade = new Business.Localidade(locald.getLocalidade(cod_loc));
                string latitute = reader.GetString(10);
                string longitude = reader.GetString(11);


                Business.Curso curso = new Business.Curso(nome, cod_curso, area, cod_pos, morada, descricao, total_vagas, nr_inscritos, renumeracao, localidade, latitute, longitude);


                array.Add(curso);

            }

            reader.Close();
            return array;
        }


        public List<Business.Curso> getCursosLocalidade1(int localidadec)
        {
            List<Business.Curso> array = new List<Business.Curso>();
            SqlDataReader reader;


            ligacao.Select("select * from cursos where cod_localidade ='" + localidadec + "'");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {

                int cod_curso = reader.GetInt32(0);
                string nome = reader.GetString(1);
                int cod_area = reader.GetInt32(2);
                Data.Area areap = new Data.Area();
                Business.Area area = new Business.Area(areap.getArea(cod_area));
                string morada = reader.GetString(3);
                string cod_pos = reader.GetString(4);
                string descricao = reader.GetString(5);
                int nr_inscritos = reader.GetInt32(6);
                int total_vagas = reader.GetInt32(7);
                int renumeracao = reader.GetInt32(8);
                int cod_loc = reader.GetInt32(9);
                Data.Localidade locald = new Data.Localidade();
                Business.Localidade localidade = new Business.Localidade(locald.getLocalidade(cod_loc));
                string latitute = reader.GetString(10);
                string longitude = reader.GetString(11);


                Business.Curso curso = new Business.Curso(nome, cod_curso, area, cod_pos, morada, descricao, total_vagas, nr_inscritos, renumeracao, localidade, latitute, longitude);


                array.Add(curso);

            }

            reader.Close();
            return array;
        }

        public List<Business.Curso> getCursosArea(int areac)
        {
            List<Business.Curso> array = new List<Business.Curso>();
            SqlDataReader reader;


            ligacao.Select("select * from cursos where cod_area ='" + areac + "'");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {

                int cod_curso = reader.GetInt32(0);
                string nome = reader.GetString(1);
                int cod_area = reader.GetInt32(2);
                Data.Area areap = new Data.Area();
                Business.Area area = new Business.Area(areap.getArea(cod_area));
                string morada = reader.GetString(3);
                string cod_pos = reader.GetString(4);
                string descricao = reader.GetString(5);
                int nr_inscritos = reader.GetInt32(6);
                int total_vagas = reader.GetInt32(7);
                int renumeracao = reader.GetInt32(8);
                int cod_loc = reader.GetInt32(9);
                Data.Localidade locald = new Data.Localidade();
                Business.Localidade localidade = new Business.Localidade(locald.getLocalidade(cod_loc));
                string latitute = reader.GetString(10);
                string longitude = reader.GetString(11);


                Business.Curso curso = new Business.Curso(nome, cod_curso, area, cod_pos, morada, descricao, total_vagas, nr_inscritos, renumeracao, localidade, latitute, longitude);


                array.Add(curso);

            }

            reader.Close();
            return array;
        }

        public Business.Curso getCursoNome(string nomec)
        {
            SqlDataReader reader;
            Business.Curso curs = new Business.Curso();

            ligacao.Select("SELECT Cursos.cod_curso, Cursos.nome, Cursos.cod_area,Cursos.rua,Cursos.cod_postal,Cursos.descricao,Cursos.total_vagas,Cursos.nr_inscritos,Cursos.total_vagas,Cursos.remuneracao,Cursos.cod_localidade,Cursos.latitude,Cursos.Longitude,Area.nome as nome_area, Localidades.nome as nome_local,Distritos.nome as nome_dist,Distritos.cod_distrito FROM Cursos,Area,Localidades,distritos where Cursos.nome like '%" + nomec + "%'");
            reader = ligacao.mySqlDataReader;

            if (reader.Read())
            {
                Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
                Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_local"].ToString());
                Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome_area"].ToString());

                curs = new Business.Curso(reader["nome"].ToString(), (int)reader["cod_curso"], area, reader["cod_postal"].ToString(), reader["rua"].ToString(), reader["descricao"].ToString(),
                    (int)reader["total_vagas"], (int)reader["nr_inscritos"], (int)reader["remuneracao"], local, reader["latitude"].ToString(), reader["longitude"].ToString());
            }

            reader.Close();
            return curs;
        }

        public List<Business.Anuncio> getAnuncios(string username)
        {
            List<Business.Anuncio> array = new List<Business.Anuncio>();
            SqlDataReader reader;

            ligacao.Select("SELECT Anuncios.cod_anuncio,Anuncios.cod_area,Anuncios.username,Anuncios.descricao,Anuncios.rua,Anuncios.cod_postal,Anuncios.cod_localidade,Anuncios.latitude,Anuncios.longitude, Area.nome, Localidades.nome as nome_localidade,Localidades.cod_distrito,Distritos.nome as nome_dist FROM Anuncios,Area,Localidades,Distritos where username='" + username + "' and Area.cod_area=Anuncios.cod_area and Anuncios.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=Localidades.cod_distrito");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {
                Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
                Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_localidade"].ToString());
                Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome"].ToString());

                array.Add(new Business.Anuncio((int)reader["cod_anuncio"], area, reader["username"].ToString(), reader["descricao"].ToString(), reader["rua"].ToString(), local, reader["cod_postal"].ToString(), reader["latitude"].ToString(), reader["longitude"].ToString()));
            }
            reader.Close();
            return array;
        }

        public List<Business.Anuncio> getAnunciosArea(int areac)
        {
            List<Business.Anuncio> array = new List<Business.Anuncio>();
            SqlDataReader reader;

            ligacao.Select("select * from anuncios where cod_area ='" + areac + "'");

            reader = ligacao.mySqlDataReader;
            Business.Anuncio anuncio = new Business.Anuncio();
            while (reader.Read())
            {
                int cod_anuncio = reader.GetInt32(0);
                int cod_area = reader.GetInt32(1);
                string username = reader.GetString(2);
                string descricao = reader.GetString(3);
                string rua = reader.GetString(4);
                string cod_postal = reader.GetString(5);
                int cod_localidade = reader.GetInt32(6);
                string latitude = reader.GetString(7);
                string longitude = reader.GetString(8);

                Data.Localidade locald = new Data.Localidade();
                Business.Localidade local = new Business.Localidade(locald.getLocalidade(cod_localidade));
                Data.Area aread = new Data.Area();
                Business.Area area = new Business.Area(aread.getArea(cod_area));

                anuncio = new Business.Anuncio(cod_anuncio, area, username, descricao, rua, local, cod_postal, latitude, longitude);
                array.Add(anuncio);
            }

            reader.Close();

            return array;
        }

        public List<Business.Anuncio> getAnunciosLocalidade(int localidadec)
        {
            List<Business.Anuncio> array = new List<Business.Anuncio>();
            SqlDataReader reader;

            ligacao.Select("select * from anuncios where cod_localidade ='" + localidadec + "'");

            reader = ligacao.mySqlDataReader;
            Business.Anuncio anuncio = new Business.Anuncio();
            while (reader.Read())
            {
                int cod_anuncio = reader.GetInt32(0);
                int cod_area = reader.GetInt32(1);
                string username = reader.GetString(2);
                string descricao = reader.GetString(3);
                string rua = reader.GetString(4);
                string cod_postal = reader.GetString(5);
                int cod_localidade = reader.GetInt32(6);
                string latitude = reader.GetString(7);
                string longitude = reader.GetString(8);

                Data.Localidade locald = new Data.Localidade();
                Business.Localidade local = new Business.Localidade(locald.getLocalidade(cod_localidade));
                Data.Area aread = new Data.Area();
                Business.Area area = new Business.Area(aread.getArea(cod_area));

                anuncio = new Business.Anuncio(cod_anuncio, area, username, descricao, rua, local, cod_postal, latitude, longitude);
                array.Add(anuncio);
            }

            reader.Close();

            return array;
        }

        public Business.Anuncio getAnuncio(int codigo)
        {

            SqlDataReader reader;

            ligacao.Select("select * from anuncios where cod_anuncio ='" + codigo + "'");

            reader = ligacao.mySqlDataReader;
            Business.Anuncio anuncio = new Business.Anuncio();
            if (reader.Read())
            {
                int cod_anuncio = reader.GetInt32(0);
                int cod_area = reader.GetInt32(1);
                string username = reader.GetString(2);
                string descricao = reader.GetString(3);
                string rua = reader.GetString(4);
                string cod_postal = reader.GetString(5);
                int cod_localidade = reader.GetInt32(6);
                string latitude = reader.GetString(7);
                string longitude = reader.GetString(8);

                Data.Localidade locald = new Data.Localidade();
                Business.Localidade local = new Business.Localidade(locald.getLocalidade(cod_localidade));
                Data.Area aread = new Data.Area();
                Business.Area area = new Business.Area(aread.getArea(cod_area));

                anuncio = new Business.Anuncio(cod_anuncio, area, username, descricao, rua, local, cod_postal, latitude, longitude);
                reader.Close();
            }

            reader.Close();

            return anuncio;

        }

        public List<Business.Localidade> getLocalidades()
        {
            List<Business.Localidade> array = new List<Business.Localidade>();
            SqlDataReader reader;

            ligacao.Select("SELECT cod_localidade,cod_distrito,nome FROM Localidades ORDER BY nome");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {
                Business.Distrito dist = new Business.Distrito();
                dist.CodDistrito = reader.GetInt32(1);
                array.Add(new Business.Localidade(reader.GetInt32(0), dist, reader.GetString(2)));
            }
            reader.Close();
            return array;
        }

        public List<Business.Distrito> getDistritos()
        {
            List<Business.Distrito> array = new List<Business.Distrito>();
            SqlDataReader reader;

            ligacao.Select("SELECT cod_distrito,nome FROM Distritos ORDER BY nome");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
                array.Add(new Business.Distrito(reader.GetInt32(0), reader.GetString(1)));

            reader.Close();
            return array;
        }

        public List<Business.Area> getAreas()
        {
            List<Business.Area> array = new List<Business.Area>();
            SqlDataReader reader;

            ligacao.Select("SELECT cod_area,nome FROM Area ORDER BY nome");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
                array.Add(new Business.Area(reader.GetInt32(0), reader.GetString(1)));

            reader.Close();
            return array;
        }
    }
}
